package com.saasitems.admin.web.controller;

import com.saasitems.admin.dao.ManagerUserMapper;
import com.saasitems.admin.model.UUser;
import com.saasitems.core.shiro.token.ShiroToken;
import org.apache.commons.lang.StringUtils;
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.DisabledAccountException;
import org.apache.shiro.authc.IncorrectCredentialsException;
import org.apache.shiro.authc.UnknownAccountException;
import org.apache.shiro.web.util.SavedRequest;
import org.apache.shiro.web.util.WebUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import java.util.HashMap;
import java.util.Map;

/**
 * Created by Administrator on 2016/12/15.
 */
@Controller
public class PublicController {

//    @RequestMapping(value = "/admin/login", method = RequestMethod.GET)
//    public ModelAndView login() {
//        return new ModelAndView("admin/login");
//    }

//    @RequestMapping(value = "/admin/login", method = RequestMethod.POST)
//    public Map<String, Object> login(UUser user, Boolean rememberMe, HttpServletRequest request) {
//        Map<String, Object> resultMap = new HashMap<String, Object>();
//        try {
//            ShiroToken token = new ShiroToken(user.getEmail(), user.getPswd());
//            token.setRememberMe(rememberMe);
//            SecurityUtils.getSubject().login(token);
//
//            /**
//             * shiro 获取登录之前的地址
//             * 之前0.1版本这个没判断空。
//             */
//            SavedRequest savedRequest = WebUtils.getSavedRequest(request);
//            String url = null;
//            if (null != savedRequest) {
//                url = savedRequest.getRequestUrl();
//            }
//            /**
//             * 我们平常用的获取上一个请求的方式，在Session不一致的情况下是获取不到的
//             * String url = (String) request.getAttribute(WebUtils.FORWARD_REQUEST_URI_ATTRIBUTE);
//             */
//            // LoggerUtils.fmtDebug(getClass(), "获取登录之前的URL:[%s]",url);
//            //如果登录之前没有地址，那么就跳转到首页。
//            if (StringUtils.isBlank(url)) {
//                url = request.getContextPath() + "/admin/index.shtml";
//            }
//            //跳转地址
//            resultMap.put("url", url);
//            /**
//             * 这里其实可以直接catch Exception，然后抛出 message即可，但是最好还是各种明细catch 好点。。
//             */
//        } catch (DisabledAccountException e) {
//            resultMap.put("status", 500);
//            resultMap.put("message", "帐号已经禁用。");
//        } catch (Exception e) {
//            resultMap.put("status", 500);
//            resultMap.put("message", "帐号或密码错误");
//        }
//        return resultMap;
//    }

    @RequestMapping(value = "/admin/login")
    public String showLoginForm(HttpServletRequest req, Model model) {
        String exceptionClassName = (String) req.getAttribute("shiroLoginFailure");
        String error = null;
        if (UnknownAccountException.class.getName().equals(exceptionClassName)) {
            error = "用户名/密码错误";
        } else if (IncorrectCredentialsException.class.getName().equals(exceptionClassName)) {
            error = "用户名/密码错误";
        } else if (exceptionClassName != null) {
            error = "其他错误：" + exceptionClassName;
        }
        model.addAttribute("error", error);
        if (req.getParameter("forceLogout") != null) {
            model.addAttribute("error", "您已经被管理员强制退出，请重新登录");
        }
        return "admin/login";
    }
}
